/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Progra1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;

public class Caso7BD {

    private Connection conexion;
    private long mTiempoEjecucion;

    public Caso7BD() {
        conexion = null;
        mTiempoEjecucion=0;

    }

    /*
     * Metodo encargado de establecer la conexion por medio de la clase ConexionBD
     */
    public void conectarBD() {
        conexion = ConexionBD.getConnection();
    }

    public ArrayList<Caso4Poliza> Caso7ConsultaPorCliente(int cedula, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {
            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC, TablaVehiculos_1 as TV, TablaSeguros_1 as TS where TC.Cedula=TS.Cedula and TV.Placa=TS.Placa and TS.Cedula=?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural  join TablaVehiculos_1 as TV natural  join TablaSeguros_1 as TS where TS.Cedula=?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural left join TablaVehiculos_1 as TV natural left join TablaSeguros_1 as TS where TS.Cedula=?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural right join TablaVehiculos_1 as TV natural right join TablaSeguros_1 as TS where TS.Cedula=?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, cedula);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public ArrayList<Caso4Poliza> Caso7ConsultaPorMonto(int monto, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {

            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC, TablaVehiculos_1 as TV, TablaSeguros_1 as TS where TC.Cedula=TS.Cedula and TV.Placa=TS.Placa and TS.MontoMensual>?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural  join TablaVehiculos_1 as TV natural  join TablaSeguros_1 as TS where TS.MontoMensual>?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural left join TablaVehiculos_1 as TV natural left join TablaSeguros_1 as TS where TS.MontoMensual>?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural right join TablaVehiculos_1 as TV natural right join TablaSeguros_1 as TS where TS.MontoMensual>?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, monto);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public ArrayList<Caso4Poliza> Caso7ConsultaPorValor(int valor, int caso) {
        PreparedStatement instruccion = null;
        ArrayList<Caso4Poliza> listaPoliza = new ArrayList<Caso4Poliza>();

        try {
            String query = "";
            if (caso == 1) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico,"
                        + " TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC, "
                        + "TablaVehiculos_1 as TV, TablaSeguros_1 as TS where TC.Cedula=TS.Cedula and "
                        + "TV.Placa=TS.Placa and TV.ValorFiscal>?;";
            } else if (caso == 2) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC "
                        + "natural  join TablaVehiculos_1 as TV natural  join TablaSeguros_1 as TS where "
                        + "TV.ValorFiscal>?;";
            } else if (caso == 3) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from  TablaSeguros_1 as TS natural "
                        + "left join TablaVehiculos_1 as TV natural left join  TablaClientes_1 as TC  where"
                        + " TV.ValorFiscal>?;";
            } else if (caso == 4) {
                query = "select TC.Cedula, TC.Nombre, TC.Direccion, TC.Telefono, TC.CorreoElectronico, "
                        + "TV.Placa, TV.Color, TV.Año, TV.Modelo, TV.ValorFiscal, TV.FechaInscripcion, "
                        + "TS.NumeroPoliza, TS.FechaInicio, TS.MontoMensual from TablaClientes_1 as TC natural"
                        + " right join TablaVehiculos_1 as TV natural right join TablaSeguros_1 as TS where "
                        + "TV.ValorFiscal>?;";
            }
            instruccion = conexion.prepareStatement(query);
            instruccion.setInt(1, valor);
            Date tiempoInicioSelect = new Date();
            ResultSet result = instruccion.executeQuery();
            Date tiempoFinalSelect = new Date();
            this.mTiempoEjecucion = tiempoFinalSelect.getTime() - tiempoInicioSelect.getTime();
            while (result.next()) {
                Caso4Poliza poliza = new Caso4Poliza();

                poliza.setmCedula(result.getInt("Cedula"));
                poliza.setmNombre(result.getString("Nombre"));
                poliza.setmDireccion(result.getString("Direccion"));
                poliza.setmTelefono(result.getInt("Telefono"));
                poliza.setmCorreo(result.getString("CorreoElectronico"));
                poliza.setmPlaca(result.getInt("Placa"));
                poliza.setmColor(result.getString("Color"));
                poliza.setmAño(result.getInt("Año"));
                poliza.setmModelo(result.getString("Modelo"));
                poliza.setmValor(result.getInt("ValorFiscal"));
                poliza.setMfechaInicio(result.getDate("FechaInicio"));
                poliza.setmFechaInscripcion(result.getDate("FechaInscripcion"));
                poliza.setmMonto(result.getInt("MontoMensual"));
                poliza.setmNumeroPoliza(result.getInt("NumeroPoliza"));

                listaPoliza.add(poliza);

            }
            instruccion.close();

        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return listaPoliza;
    }

    public long getDuracion() {
        return this.mTiempoEjecucion;
    }
}
